﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using Interfaces;

namespace Model
{
    public class OrdreCollection
    {
        private List<Ordre> OrdreListe;

        //// Til tests...
        //private Ordre ordre;
        //private Homeparty homeParty;
        //private HomepartyCollection homePartyColl = new HomepartyCollection();
        //private Sælger sælger;
        //private SælgerCollection sælgerColl = new SælgerCollection();
        //private Kunde kunde;
        //private KundeCollection kundeColl = new KundeCollection();
        //// Til tests...!

        public OrdreCollection()
        {
            OrdreListe = new List<Ordre>();

            // Til tests...
            //ordre = new Ordre(1010, DateTime.Parse("2011-12-12"), homeParty);
            //OrdreListe.Add(ordre);

            //ordre = new Ordre(1010, DateTime.Parse("2011-12-12"), null);
            //OrdreListe.Add(ordre);

            //sælger = new Sælger(1100, "DumbShit", 66666666, "dumbshit@shit.dk", "Kløvervænget 13", 5000, "Odense");
            //sælgerColl.Sælgere.Add(sælger);

            //kunde = new Kunde("Dude", "Bongvej 500", "dude@dudster.dk", 5000, 1110, 55555555);
            //kundeColl.KundeListe.Add(kunde);

            //homeParty = new Homeparty(1111, kunde, DateTime.Parse("2011-12-12"), Interfaces.Landsdel.SYDDANMARK);
            //homePartyColl.Homeparties.Add(homeParty);
            // Til tests...!
        }
                
        public Ordre FindOrdre(int ordrenr)
        {
            foreach (Ordre o in OrdreListe)
            {
                if (o.Ordrenr == ordrenr)
                {
                    return o;
                }
                
            }
            return null;
        }

        public List<Ordre> FindOrdredato(DateTime startdato, DateTime slutdato)
        {
             List<Ordre> ordrer = new List<Ordre>();
            foreach (Ordre o in OrdreListe)
            {
                if (startdato.DayOfYear < o.Dato.DayOfYear && o.Dato.DayOfYear < slutdato.DayOfYear && startdato.Year < o.Dato.Year && o.Dato.Year < slutdato.Year)
                {
                    ordrer.Add(o);
                }
                
            }
            return ordrer;
        }

        public Ordre OpretOrdre(int ordreNr, DateTime ordreDato, Homeparty homeParty, Sælger sælger)
        {
            Ordre ordre = new Ordre(ordreNr, ordreDato, homeParty, sælger);
            OrdreListe.Add(ordre);
            return ordre;
        }

		public Ordre OpretOrdre(int ordreNr, DateTime ordreDato, Homeparty homeParty)
		{
			Ordre ordre = new Ordre(ordreNr, ordreDato, homeParty);
			OrdreListe.Add(ordre);
			return ordre;
		}

        public void SletOrdre(int ordrenr)
        {
            Ordre o = FindOrdre(ordrenr);
            if (o.Delordreliste.Count == 0)
            {
                OrdreListe.Remove(o);
            }
                        
        }
        public Delordre FindDelordreKunde(Kunde kunde)
        {
            foreach (Ordre o in OrdreListe)
            {
                Delordre d = o.FindDelordreKunde(kunde);
                return d;
            }
            return null;
        }

        public Delordre FindDelordre(int delordrenr)
        {
            foreach (Ordre o in OrdreListe)
            {
                Delordre d = o.FindDelordre(delordrenr);
                if (d != null)
                {
                    return d;
                }
            }
            return null;
        }

        public Delordre OpretDelordre(int ordreid, Kunde kunde, int delordrenr, bool betalt, Betalingsmetode betalingsmetode)
        {
            Ordre ordre = FindOrdre(ordreid);
            return ordre.OpretDelordre(kunde, delordrenr, betalt, betalingsmetode);
        }

        public Delordre OpretDelordre(int ordreid, Kunde kunde, int delordrenr, bool betalt, Betalingsmetode betalingsmetode, string betalingskommentar)
        {
            Ordre ordre = FindOrdre(ordreid);
            return ordre.OpretDelordre(kunde, delordrenr, betalt, betalingsmetode, betalingskommentar);
        }

		public IEnumerator HentOrdrer()
		{
			return OrdreListe.GetEnumerator();
		}
    }
}
